package com.lxw.multidb.controller.es;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 数据导入进度DTO
 * 用于记录和返回ES数据导入的实时进度信息
 *
 * @author lxw
 * @date 2025-10-31
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ImportProgressDTO {

    /**
     * 总条数
     */
    private Long totalCount;

    /**
     * 已完成条数
     */
    private Long finishCount;

    /**
     * 任务状态
     * 0 - 进行中
     * 1 - 已完成
     * 2 - 异常/失败
     */
    private Integer state;

    /**
     * 消息说明
     * 用于描述任务状态的详细信息
     * - 进行中：可为空或显示当前进度百分比
     * - 已完成：显示"导入成功"等提示
     * - 异常/失败：显示具体的错误信息
     */
    private String msg;

    /**
     * 创建进行中的任务进度
     *
     * @param totalCount  总条数
     * @param finishCount 已完成条数
     * @return ImportProgressDTO
     */
    public static ImportProgressDTO processing(Long totalCount, Long finishCount) {
        return new ImportProgressDTO(totalCount, finishCount, 0, "进行中");
    }

    /**
     * 创建进行中的任务进度（带消息说明）
     *
     * @param totalCount  总条数
     * @param finishCount 已完成条数
     * @param msg         消息说明
     * @return ImportProgressDTO
     */
    public static ImportProgressDTO processing(Long totalCount, Long finishCount, String msg) {
        return new ImportProgressDTO(totalCount, finishCount, 0, msg);
    }

    /**
     * 创建已完成的任务进度
     *
     * @param totalCount  总条数
     * @param finishCount 已完成条数
     * @return ImportProgressDTO
     */
    public static ImportProgressDTO completed(Long totalCount, Long finishCount) {
        return new ImportProgressDTO(totalCount, finishCount, 1, "导入成功");
    }

    /**
     * 创建已完成的任务进度（带自定义消息）
     *
     * @param totalCount  总条数
     * @param finishCount 已完成条数
     * @param msg         消息说明
     * @return ImportProgressDTO
     */
    public static ImportProgressDTO completed(Long totalCount, Long finishCount, String msg) {
        return new ImportProgressDTO(totalCount, finishCount, 1, msg);
    }

    /**
     * 创建异常/失败的任务进度
     *
     * @param totalCount  总条数
     * @param finishCount 已完成条数
     * @param msg         异常消息说明
     * @return ImportProgressDTO
     */
    public static ImportProgressDTO failed(Long totalCount, Long finishCount, String msg) {
        return new ImportProgressDTO(totalCount, finishCount, 2, msg);
    }

    /**
     * 创建默认的已完成状态（用于缓存不存在时的默认返回）
     *
     * @return ImportProgressDTO
     */
    public static ImportProgressDTO defaultCompleted() {
        return new ImportProgressDTO(100L, 100L, 1, "任务已完成");
    }
}